const API = require("./api")
const HEADERS = {
	'content-type': 'application/json', // 默认值
}
const TIMEOUT = 6000 // 请求超时限制 单位毫秒
const DATETYPE = "json"

const requestWhiteList = [
	"/system/AppWechat/getbEnterpriselist",
	"/system/AppWechat/getbEnterpriseScience",
	"/system/AppWechat/getbBannerDiagramlist",
]
/**
 * get请求
 * @param {*} url 
 * @param {*} params 
 * @param {*} mask 是否显示透明蒙层，防止触摸穿透
 */
function GET(url, params, mask) {
	params = setParamsDefault(params)
	// 校验发布状态
	if (wx.getStorageSync('APPLETSTATUS') && wx.getStorageSync('APPLETSTATUS') == "dev") {
		if (!requestWhiteList.includes(url)) {
			return alertErr({
				errMsg: "4200服务状态错误",
				errno: "4200"
			})
		}
	}
	if(params.loading){
		wx.showLoading({
			title: 'loading...',
			mask: mask
		})
	}

	return new Promise((respose, reject) => {
		wx.request({
			url: API.BASEURL + url, //仅为示例，并非真实的接口地址
			data: params,
			method: "GET",
			header: HEADERS,
			dataType: DATETYPE,
			timeout: TIMEOUT,
			success(res) {
				respose(res.data, res)
			},
			fail(err) {
				if(params.skipInterceptors){
					reject(err);
					return
				}
				console.error("公用错误", err)
				alertErr(err)
				reject(err)
			},
			complete(com) {
				// console.warn(com)
				wx.hideLoading()
			}
		})
	})
}

/**
 * POST请求
 * @param {*} url 
 * @param {*} params 
 * @param {*} mask 是否显示透明蒙层，防止触摸穿透
 */
function POST(url, params, mask) {
	params = setParamsDefault(params)
	// 校验发布状态
	// if (wx.getStorageSync('APPLETSTATUS') && wx.getStorageSync('APPLETSTATUS') == "dev") {
	// 	if (!requestWhiteList.includes(url)) {
	// 		return alertErr({
	// 			errMsg: "4200服务状态错误",
	// 			errno: "4200"
	// 		})
	// 	}
	// }


	if(params.loading){
		wx.showLoading({
			title: 'loading...',
			mask: mask
		})
	}

	return new Promise((respose, reject) => {
		wx.request({
			url: API.BASEURL + url, //仅为示例，并非真实的接口地址
			data: params,
			method: "POST",
			header: HEADERS,
			dataType: DATETYPE,
			timeout: TIMEOUT,
			success(res) {
				respose(res.data, res)
			},
			fail(err) {
				if(params.skipInterceptors){
					reject(err);
					return
				}
				console.error("公用错误", err)
				alertErr(err)
				reject(err)
			},
			complete(com) {
				// console.warn(com)
				wx.hideLoading()
			}
		})
	})
}

function alertErr(err) {
	setTimeout(() => {
		let errMsg = err.errMsg
		let errCode = err.errno

		if (errMsg.indexOf("fail timeout") != -1) {
			console.error("服务请求超时！")
			return wx.showToast({
				title: '服务请求超时！',
				duration: 3000,
				icon: "error"
			})
		}

		switch (errCode) {
			case 600009:
				console.error("服务请求失败！")
				wx.showToast({
					title: '服务请求失败！',
					duration: 3000,
					icon: "error"
				})
				break;
			case 4200:
				wx.showToast({
					title: '项目处于测试阶段！请联系管理员处理',
					duration: 3000,
					icon: "error"
				})
				break;

			default:
				wx.showToast({
					title: errMsg,
					duration: 3000,
					icon: "none"
				})
				break;
		}

	}, 500)
}

function setParamsDefault(params){
	if(params===null || params===undefined || params===""|| params==="null"){
		params["loading"] = true;
		params["skipInterceptors"] = false;
		return params;
	}
	if(params["loading"] ===null ||  params["loading"]===undefined || params["loading"]===""||params["loading"]==="null"){
		params["loading"] = true;
	}
	if(params["skipInterceptors"] ===null ||  params["skipInterceptors"]===undefined || params["skipInterceptors"]===""||params["skipInterceptors"]==="null"){
		params["skipInterceptors"] = false
	}
	return params;
}

/**
 * 文件上传
 * @param {*} url 上传地址
 * @param {*} path 文件临时路径
 * @param {*} params 自定义上传参数
 */
function UPLOADFILE(url, path, params) {
	wx.showLoading({
		title: 'loading...',
		mask: true
	})
	return new Promise((resove, reject) => {
		wx.uploadFile({
			url: API.UPLOADURL + url, //仅为示例，非真实的接口地址
			filePath: path,
			name: 'file',
			formData: params, // 上传自定义参数
			success(res) {
				resove(res)
			},
			fail(err) {
				console.error("公用错误", err)
				alertErr(err)
				reject(err)
			},
			complete(com) {
				wx.hideLoading()
			}
		})
	})
}

export {
	GET,
	POST,
	UPLOADFILE
}